System Calls হলো একটি প্রোগ্রামের মাধ্যমে অপারেটিং সিস্টেমের সেবা ব্যবহার করার পদ্ধতি। Assembly Language-এ System Calls ব্যবহারের মাধ্যমে আমরা বিভিন্ন অপারেটিং সিস্টেম-লেভেলের কাজ সম্পন্ন করতে পারি, যেমন ফাইল পরিচালনা, ইনপুট/আউটপুট অপারেশন, প্রক্রিয়া পরিচালনা ইত্যাদি। System Calls সরাসরি কোর অপারেটিং সিস্টেমের সাথে যোগাযোগ করে এবং প্রোগ্রামের কার্যক্ষমতা বাড়াতে সহায়তা করে।
System Call-এর কাজের পদ্ধতি:
INT
নির্দেশনা ব্যবহার করে সিস্টেম কল করা হয়।Linux System Calls উদাহরণ:
Linux অপারেটিং সিস্টেমে System Calls সম্পন্ন করার জন্য সাধারণত INT 0x80
ব্যবহার করা হয়। 64-বিট সিস্টেমে syscall
নির্দেশনা ব্যবহৃত হয়।
সাধারণ System Calls এবং তাদের উদাহরণ:
EAX
= 4 (System Call নম্বর, write
)EBX
= ফাইল ডিসক্রিপ্টর (1 হলে stdout
)ECX
= মেমোরি লোকেশনের ঠিকানা (যেখানে লেখার ডেটা সংরক্ষিত)EDX
= লেখার ডেটার দৈর্ঘ্যউদাহরণ:
section .data
msg db 'Hello, World!', 0xA ; মেসেজ সংরক্ষণ
section .text
global _start
_start:
mov EAX, 4 ; System call number for write
mov EBX, 1 ; File descriptor (stdout)
mov ECX, msg ; Message address
mov EDX, 13 ; Message length
int 0x80 ; Interrupt to call kernel
mov EAX, 1 ; System call number for exit
xor EBX, EBX ; Exit status 0
int 0x80 ; Interrupt to exit
EAX
= 3 (System Call নম্বর, read
)EBX
= ফাইল ডিসক্রিপ্টর (0 হলে stdin
)ECX
= ইনপুট স্টোর করার ঠিকানাEDX
= পড়ার ডেটার সর্বোচ্চ দৈর্ঘ্যউদাহরণ:
section .bss
buffer resb 10 ; 10 বাইটের জন্য স্থান রিজার্ভ
section .text
global _start
_start:
mov EAX, 3 ; System call number for read
mov EBX, 0 ; File descriptor (stdin)
mov ECX, buffer ; Buffer address
mov EDX, 10 ; Maximum length to read
int 0x80 ; Interrupt to call kernel
; পরবর্তী অপারেশন যেখানে ইনপুট প্রসেস করা হবে
mov EAX, 1 ; Exit system call
xor EBX, EBX ; Exit status 0
int 0x80 ; Interrupt to exit
System Call ব্যবহারের গুরুত্বপূর্ণ বিষয়:
INT 0x80
ব্যবহার করে Kernel-কে সিস্টেম কল করা হয়।EAX
রেজিস্টারে রিটার্ন করা হয়, যা নির্দেশ করে সিস্টেম কল সফল হয়েছে কিনা।System Call | Number (Linux) | ব্যবহার |
---|---|---|
exit | 1 | প্রোগ্রাম শেষ করার জন্য |
write | 4 | স্ক্রিন বা ফাইলে ডেটা লেখার জন্য |
read | 3 | কীবোর্ড বা ফাইল থেকে ডেটা পড়ার জন্য |
open | 5 | ফাইল ওপেন করার জন্য |
close | 6 | ফাইল বন্ধ করার জন্য |
Modern 64-bit Linux System Calls:
64-বিট সিস্টেমে syscall
নির্দেশনা ব্যবহার করা হয়, যেখানে সিস্টেম কল নম্বর RAX
রেজিস্টারে এবং প্যারামিটারগুলি RDI
, RSI
, RDX
, R10
, R8
, এবং R9
রেজিস্টারে পাঠানো হয়।
উদাহরণ (64-bit):
section .data
msg db 'Hello, 64-bit World!', 0xA
len equ $ - msg
section .text
global _start
_start:
mov RAX, 1 ; System call number for write
mov RDI, 1 ; File descriptor (stdout)
mov RSI, msg ; Message address
mov RDX, len ; Message length
syscall ; Call kernel
mov RAX, 60 ; System call number for exit
xor RDI, RDI ; Exit status 0
syscall ; Call kernel to exit
সারসংক্ষেপ
Assembly Language-এ System Calls সরাসরি অপারেটিং সিস্টেমের সাথে যোগাযোগ করার একটি কার্যকর পদ্ধতি। System Calls ব্যবহার করে আমরা প্রোগ্রামের মাধ্যমে ইনপুট/আউটপুট অপারেশন, ফাইল ম্যানেজমেন্ট, এবং অন্যান্য সিস্টেম লেভেলের কাজ সম্পন্ন করতে পারি। INT 0x80
নির্দেশনা এবং syscall
ব্যবহার করে Assembly Language প্রোগ্রামিংয়ে System Calls কার্যকর করা হয়, যা প্রোগ্রামের কার্যক্ষমতা এবং সক্ষমতা বৃদ্ধি করে।
System Calls হলো প্রোগ্রাম এবং অপারেটিং সিস্টেমের মধ্যে সংযোগ স্থাপনের একটি পদ্ধতি, যা অ্যাপ্লিকেশন প্রোগ্রামগুলোকে অপারেটিং সিস্টেমের সেবা ও রিসোর্স ব্যবহার করার সুযোগ দেয়। সাধারণত, অ্যাপ্লিকেশন প্রোগ্রাম সরাসরি হার্ডওয়্যার বা অপারেটিং সিস্টেমের নিম্ন স্তরের কাজ করতে পারে না, তাই সিস্টেম কল ব্যবহার করা হয়।
System Calls হলো বিশেষ ফাংশন বা পদ্ধতি যা অ্যাপ্লিকেশন প্রোগ্রামকে অপারেটিং সিস্টেমের কাজগুলির জন্য একটি নির্দিষ্ট অনুরোধ করতে সক্ষম করে। উদাহরণস্বরূপ, ফাইল পড়া বা লেখা, প্রসেস তৈরি করা, এবং মেমোরি পরিচালনা করা।
System Call এর কাজের পদ্ধতি:
pipe()
, message queue
এবং shared memory
।Linux অপারেটিং সিস্টেমে কিছু সাধারণ System Call:
read(): একটি ফাইল বা ইনপুট ডিভাইস থেকে ডেটা পড়ার জন্য ব্যবহৃত।
int fd = open("file.txt", O_RDONLY);
char buffer[100];
read(fd, buffer, 100);
write(): একটি ফাইল বা আউটপুট ডিভাইসে ডেটা লেখার জন্য ব্যবহৃত।
write(fd, buffer, 100);
fork(): একটি নতুন প্রসেস তৈরি করতে ব্যবহৃত।
pid_t pid = fork();
if (pid == 0) {
// Child process
} else {
// Parent process
}
exec(): একটি প্রসেসের সাথে একটি নতুন প্রোগ্রাম লোড করতে ব্যবহৃত।
execl("/bin/ls", "ls", NULL);
exit(): একটি প্রসেস শেষ করতে ব্যবহৃত।
exit(0);
fork()
, exec()
, exit()
।open()
, read()
, write()
, close()
।ioctl()
, read()
, write()
।getpid()
, alarm()
।pipe()
, shmget()
।সারসংক্ষেপ
System Calls প্রোগ্রাম এবং অপারেটিং সিস্টেমের মধ্যে একটি ব্রিজ হিসেবে কাজ করে, যা প্রোগ্রামকে অপারেটিং সিস্টেমের বিভিন্ন সেবা এবং রিসোর্স ব্যবহার করতে সহায়তা করে। এগুলি সিস্টেম সুরক্ষা এবং কার্যক্ষমতা নিশ্চিত করে এবং বিভিন্ন প্রক্রিয়া, ফাইল, ডিভাইস, এবং যোগাযোগ পরিচালনার জন্য অপরিহার্য।
System Call Interface (SCI) হলো একটি প্রোগ্রামিং ইন্টারফেস যা অপারেটিং সিস্টেমের কোর (kernel) এর সাথে ব্যবহারকারী প্রোগ্রামের যোগাযোগ নিশ্চিত করে। এটি অপারেটিং সিস্টেমের গুরুত্বপূর্ণ ফাংশনগুলো, যেমন ফাইল অপারেশন, প্রসেস ম্যানেজমেন্ট, এবং মেমোরি ম্যানেজমেন্ট পরিচালনা করতে ব্যবহার করা হয়। Linux এবং Windows অপারেটিং সিস্টেমের System Call Interface-এর কাঠামো এবং ব্যবহারের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে।
Linux System Call Interface সাধারণত Assembly Language বা উচ্চ-স্তরের ভাষা ব্যবহার করে প্রোগ্রামারের অ্যাপ্লিকেশন থেকে kernel ফাংশনগুলো কল করতে ব্যবহৃত হয়। Linux-এ system call ইন্টারফেস সাধারণত int 0x80
বা syscall
নির্দেশনা ব্যবহার করে কাজ করে।
প্রক্রিয়া:
eax
রেজিস্টারে লোড করা হয়।ebx
, ecx
, edx
, esi
, এবং edi
রেজিস্টারে লোড করা হয়।int 0x80
বা syscall
নির্দেশনা ব্যবহার করে system call কার্যকর করা হয়।Assembly উদাহরণ:
section .text
global _start
_start:
; sys_write সিস্টেম কল
mov eax, 4 ; sys_write এর সিস্টেম কল নম্বর (4)
mov ebx, 1 ; ফাইল ডিসক্রিপ্টর (stdout)
mov ecx, msg ; মেসেজের অ্যাড্রেস
mov edx, 13 ; মেসেজের দৈর্ঘ্য
int 0x80 ; সিস্টেম কল
; sys_exit সিস্টেম কল
mov eax, 1 ; sys_exit এর সিস্টেম কল নম্বর (1)
xor ebx, ebx ; এক্সিট কোড 0
int 0x80 ; সিস্টেম কল
section .data
msg db 'Hello, World!', 0
নতুন ইন্টারফেস (syscall):
syscall
নির্দেশনা ব্যবহার করা হয়, যা int 0x80
এর চেয়ে দ্রুত।rax
রেজিস্টারে এবং প্যারামিটারগুলো rdi
, rsi
, rdx
, r10
, r8
, এবং r9
রেজিস্টারে লোড করা হয়।Windows System Call Interface সাধারণত API (Application Programming Interface) ব্যবহার করে অ্যাপ্লিকেশন এবং kernel-এর মধ্যে যোগাযোগ স্থাপন করে। Windows-এ system call সরাসরি ব্যবহৃত হয় না; বরং, Windows API কলগুলো kernel32.dll বা ntdll.dll লাইব্রেরির মাধ্যমে kernel-mode ফাংশনে পৌঁছায়।
প্রক্রিয়া:
উদাহরণ:
C/C++-এ Windows API ব্যবহার করে system call:
#include <windows.h>
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
নির্দেশনার কার্যপ্রণালী:
ntdll.dll
এর মাধ্যমে কাজ করে, যা kernel-level API ফাংশন, যেমন NtWriteFile
, NtCreateProcess
, ইত্যাদি ব্যবহৃত হয়।syscall
বা sysenter
নির্দেশনা ব্যবহার করা হয় যা kernel-mode এ সিস্টেম কল কার্যকর করে।বৈশিষ্ট্য | Linux | Windows |
---|---|---|
ইন্টারফেস পদ্ধতি | সরাসরি int 0x80 বা syscall ব্যবহার করে। | Windows API (kernel32.dll, ntdll.dll) মাধ্যমে। |
সিস্টেম কল নম্বর | নির্দিষ্ট রেজিস্টারে লোড করা হয় (eax , rax )। | সরাসরি ব্যবহার করা হয় না, API মাধ্যমে ম্যাপ হয়। |
কাস্টম সিস্টেম কল | ব্যবহারকারীরা প্রয়োজন হলে কাস্টম system call তৈরি করতে পারে। | সরাসরি সমর্থন নেই, তবে ড্রাইভার বা kernel-mode কোডের মাধ্যমে। |
ব্যবহার | সাধারণত অ্যাডভান্সড প্রোগ্রামার বা kernel-level প্রোগ্রামিংয়ে ব্যবহৃত। | সাধারণ অ্যাপ্লিকেশন প্রোগ্রামিংয়ে API ব্যবহৃত। |
আর্কিটেকচার | ওপেন সোর্স, পরিবর্তন করা যায়। | ক্লোজড সোর্স, Microsoft দ্বারা নিয়ন্ত্রিত। |
সারসংক্ষেপ
Linux এবং Windows উভয় অপারেটিং সিস্টেমেই System Call Interface ব্যবহার করা হয়, তবে তাদের পদ্ধতি ভিন্ন। Linux-এ সরাসরি int 0x80
বা syscall
ব্যবহার করা যায়, যেখানে Windows-এ API কল ব্যবহার করে kernel-mode ফাংশন কার্যকর করা হয়। Linux সিস্টেম কল পদ্ধতি সরাসরি এবং প্রোগ্রামার-কেন্দ্রিক, যেখানে Windows পদ্ধতি API-কেন্দ্রিক এবং সাধারণ ব্যবহারকারীদের জন্য সহজতর।
Assembly Language-এ INT নির্দেশনা ইন্টারাপ্ট কলের মাধ্যমে সিস্টেমের বিভিন্ন সেবা অ্যাক্সেস করতে ব্যবহৃত হয়। INT 80h এবং INT 2Eh হলো দুইটি সাধারণ ইন্টারাপ্ট যা ভিন্ন ভিন্ন উদ্দেশ্যে ব্যবহৃত হয়। নিচে এই দুই ইন্টারাপ্টের বিস্তারিত আলোচনা করা হলো:
INT 80h (Linux System Call Interrupt):
INT 80h
নির্দেশনা কার্যকর করা হয়।ব্যবহারিক উদাহরণ:
; Linux এ "Hello, World!" মেসেজ প্রিন্ট করার উদাহরণ
section .data
msg db 'Hello, World!', 0xA ; মেসেজ এবং নতুন লাইন
section .text
global _start
_start:
; সিস্টেম কল: write (1, msg, 13)
MOV EAX, 4 ; write সিস্টেম কল নম্বর
MOV EBX, 1 ; ফাইল ডিসক্রিপ্টর (stdout)
MOV ECX, msg ; মেসেজের ঠিকানা
MOV EDX, 13 ; মেসেজের দৈর্ঘ্য
INT 80h ; সিস্টেম কল
; সিস্টেম কল: exit (0)
MOV EAX, 1 ; exit সিস্টেম কল নম্বর
XOR EBX, EBX ; এক্সিট কোড 0
INT 80h ; সিস্টেম কল
ব্যবহার:
INT 2Eh (Windows System Call Interrupt):
ব্যবহারিক উদাহরণ:
; INT 2Eh এর একটি সাধারণ ব্যবহারের উদাহরণ (পুরোনো সিস্টেমে)
MOV AX, 4A00h ; DOS 4A সিস্টেম কল (মেমোরি বরাদ্দ)
MOV BX, 100h ; মেমোরি ব্লকের আকার
INT 2Eh ; ইন্টারাপ্ট কল
ব্যবহার:
বৈশিষ্ট্য | INT 80h | INT 2Eh |
---|---|---|
ব্যবহার | লিনাক্স সিস্টেমে সিস্টেম কলের জন্য। | পুরোনো DOS/Windows সিস্টেমে সিস্টেম কল। |
রেজিস্টার ব্যবহার | EAX, EBX, ECX, EDX ইত্যাদি। | AX এবং অন্যান্য DOS রেজিস্টার। |
অপারেটিং সিস্টেম | লিনাক্স। | DOS এবং পুরোনো Windows সিস্টেম। |
বর্তমান ব্যবহার | এখনও লিনাক্সে ব্যবহৃত হয়। | আধুনিক উইন্ডোজে আর ব্যবহার হয় না। |
সারসংক্ষেপ
INT 80h এবং INT 2Eh দুটি ভিন্ন ইন্টারাপ্ট যা লিনাক্স এবং পুরোনো উইন্ডোজ সিস্টেমে কোর সেবা কার্যকর করতে ব্যবহৃত হয়। INT 80h লিনাক্স সিস্টেমে ব্যবহৃত হয় এবং এখনও প্রাসঙ্গিক, যেখানে INT 2Eh মূলত পুরোনো DOS এবং Windows সিস্টেমে ব্যবহৃত হত এবং আধুনিক উইন্ডোজ সিস্টেমে তা আর ব্যবহৃত হয় না।
System Calls হলো এমন ফাংশন যা অপারেটিং সিস্টেমের কোর বা কার্নেলের সাথে যোগাযোগ করতে ব্যবহৃত হয়। Assembly Language প্রোগ্রামিংয়ে File I/O এবং Process Management পরিচালনার জন্য নির্দিষ্ট System Calls ব্যবহৃত হয়। System Calls ব্যবহার করে ফাইলের সাথে পড়া, লেখা, তৈরি করা এবং প্রক্রিয়া (process) তৈরি বা বন্ধ করার কাজ সম্পন্ন করা যায়।
Assembly Language-এ ফাইলের সাথে ইনপুট এবং আউটপুট অপারেশন পরিচালনা করার জন্য নিচের System Calls গুলি ব্যবহৃত হয়:
5
EAX
= 5 (System Call Number)EBX
= ফাইলের নামের পয়েন্টারECX
= ফাইলের ওপেন মোড (যেমন read-only, write-only)EDX
= পারমিশন (যদি নতুন ফাইল তৈরি করা হয়)উদাহরণ:
MOV EAX, 5 ; open system call
MOV EBX, file_name ; ফাইলের নামের পয়েন্টার
MOV ECX, 0 ; read-only মোড
INT 0x80 ; system call interrupt
3
EAX
= 3 (System Call Number)EBX
= ফাইল ডেসক্রিপ্টরECX
= ডেটা পড়ার জন্য বাফারের পয়েন্টারEDX
= পড়ার জন্য বাইটের সংখ্যাউদাহরণ:
MOV EAX, 3 ; read system call
MOV EBX, file_desc ; ফাইল ডেসক্রিপ্টর
MOV ECX, buffer ; ডেটা বাফারের পয়েন্টার
MOV EDX, 100 ; পড়ার জন্য বাইটের সংখ্যা
INT 0x80 ; system call interrupt
4
EAX
= 4 (System Call Number)EBX
= ফাইল ডেসক্রিপ্টর (স্ট্যান্ডার্ড আউটপুটের জন্য 1
)ECX
= লেখার জন্য বাফারের পয়েন্টারEDX
= লেখার জন্য বাইটের সংখ্যাউদাহরণ:
MOV EAX, 4 ; write system call
MOV EBX, 1 ; স্ট্যান্ডার্ড আউটপুট
MOV ECX, buffer ; লেখার জন্য ডেটা বাফার
MOV EDX, 100 ; লেখার জন্য বাইটের সংখ্যা
INT 0x80 ; system call interrupt
6
EAX
= 6 (System Call Number)EBX
= ফাইল ডেসক্রিপ্টরউদাহরণ:
MOV EAX, 6 ; close system call
MOV EBX, file_desc ; ফাইল ডেসক্রিপ্টর
INT 0x80 ; system call interrupt
Assembly Language-এ প্রসেস ম্যানেজমেন্টের জন্য ব্যবহৃত সাধারণ System Calls নিম্নরূপ:
2
EAX
= 2 (System Call Number)EAX
রেজিস্টারে 0
রিটার্ন হয় এবং প্যারেন্ট প্রসেসের ক্ষেত্রে এটি নতুন প্রসেসের PID রিটার্ন করে।11
EAX
= 11 (System Call Number)EBX
= প্রোগ্রামের নামের পয়েন্টারECX
= আর্গুমেন্টের পয়েন্টারEDX
= এনভায়রনমেন্টের পয়েন্টার1
EAX
= 1 (System Call Number)EBX
= রিটার্ন কোডউদাহরণ:
MOV EAX, 1 ; exit system call
MOV EBX, 0 ; রিটার্ন কোড 0 (সফল সমাপ্তি)
INT 0x80 ; system call interrupt
সারসংক্ষেপ
Assembly Language-এ File I/O এবং Process Management পরিচালনার জন্য System Calls ব্যবহৃত হয়। File I/O পরিচালনার জন্য open
, read
, write
, এবং close
System Calls ব্যবহার করা হয়। Process Management এর জন্য fork
, execve
, এবং exit
System Calls ব্যবহৃত হয়। এগুলি CPU এবং কার্নেলের মধ্যে যোগাযোগ করে কার্যকরী কার্যপ্রণালী সম্পন্ন করে এবং প্রোগ্রামের কার্যকারিতা নিশ্চিত করে।
common.read_more